using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._ServerTools._DataExtraction
{
    /// <summary>
    /// <para>Extract Data</para>
    /// <para>Extracts selected  layers in the specified area of interest to a specific format and spatial reference.   The extracted data is then written to a zip file.</para>
    /// <para>将指定感兴趣区域中的选定图层提取为特定格式和空间参考。  然后将提取的数据写入 zip 文件。</para>
    /// </summary>    
    [DisplayName("Extract Data")]
    public class ExtractData : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public ExtractData()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_Layers_to_Clip">
        /// <para>Layers to Clip</para>
        /// <para>The layers to be clipped. Layers must be feature or raster layers in the map's table of contents. Layer files do not work for this parameter.</para>
        /// <para>要裁剪的图层。图层必须是地图内容列表中的要素图层或栅格图层。图层文件不适用于此参数。</para>
        /// </param>
        /// <param name="_Area_of_Interest">
        /// <para>Area of Interest</para>
        /// <para>One or more polygons by which the layers will be clipped.</para>
        /// <para>一个或多个面，用于剪裁图层。</para>
        /// </param>
        /// <param name="_Feature_Format">
        /// <para>Feature Format</para>
        /// <para><xdoc>
        ///   <para>The format in which the output features will be delivered. The string provided should be formatted as follows:
        ///   <bulletList>
        ///     <bullet_item>Name or format - Short Name - extension (if any)  </bullet_item></bulletList>
        ///   </para>
        ///   <para>The hyphen between the components is required, as well as the spaces around the hyphen.</para>
        ///   <para>For example:
        ///   <bulletList>
        ///     <bullet_item>File Geodatabase - GDB - .gdb  </bullet_item><para/>
        ///     <bullet_item>Shapefile - SHP - .shp  </bullet_item><para/>
        ///     <bullet_item>Autodesk AutoCAD - DXF_R2007 - .dxf  </bullet_item><para/>
        ///     <bullet_item>Autodesk AutoCAD - DWG_R2007 - .dwg  </bullet_item><para/>
        ///     <bullet_item>Bentley Microstation Design (V8) - DGN_V8 - .dgn  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>Internally, this tool uses the Export to CAD tool to convert data to the .dgn, .dwg, and .dxf CAD formats. The list of short names supported includes DGN_V8, DWG_R14, DWG_R2000, DWG_R2004, DWG_R2005, DWG_R2007, DWG_R2010, DXF_R14, DXF_R2000, DXF_R2004, DXF_R2005, DXF_R2007, and DXF_R2010.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>输出要素将用于交付的格式。提供的字符串格式应如下所示：
        ///   <bulletList>
        /// <bullet_item>名称或格式 - 短名称 - 扩展名（如果有） </bullet_item></bulletList>
        ///   </para>
        ///   <para>组件之间的连字符以及连字符周围的空格是必需的。</para>
        /// <para>例如：
        ///   <bulletList>
        ///     <bullet_item>文件地理数据库 - GDB - .gdb</bullet_item><para/>
        ///     <bullet_item>形状文件 - SHP - .shp</bullet_item><para/>
        ///     <bullet_item>Autodesk AutoCAD - DXF_R2007 - .dxf</bullet_item><para/>
        ///     <bullet_item>Autodesk AutoCAD - DWG_R2007 - .dwg</bullet_item><para/>
        ///     <bullet_item>Bentley Microstation Design （V8） - DGN_V8 - .dgn</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>在内部，此工具使用导出到 CAD 工具将数据转换为 .dgn、.dwg 和 .dxf CAD 格式。支持的短名称列表包括 DGN_V8、DWG_R14、DWG_R2000、DWG_R2004、DWG_R2005、DWG_R2007、DWG_R2010、DXF_R14、DXF_R2000、DXF_R2004、DXF_R2005、DXF_R2007 和 DXF_R2010。</para>
        /// </xdoc></para>
        /// </param>
        /// <param name="_Raster_Format">
        /// <para>Raster Format</para>
        /// <para><xdoc>
        ///   <para>The format in which the output raster datasets will be delivered. The string provided should be formatted as follows:
        ///   <bulletList>
        ///     <bullet_item>Name of format - Short Name - extension (if any)  </bullet_item></bulletList>
        ///   </para>
        ///   <para>Any of the following strings will work:
        ///   <bulletList>
        ///     <bullet_item>Esri GRID - GRID  </bullet_item><para/>
        ///     <bullet_item>File Geodatabase - GDB - .gdb  </bullet_item><para/>
        ///     <bullet_item>ERDAS IMAGINE - IMG - .img  </bullet_item><para/>
        ///     <bullet_item>Tagged Image File Format - TIFF - .tif  </bullet_item><para/>
        ///     <bullet_item>Portable Network Graphics - PNG - .png  </bullet_item><para/>
        ///     <bullet_item>Graphic Interchange Format - GIF - .gif  </bullet_item><para/>
        ///     <bullet_item>Joint Photographics Experts Group - JPEG - .jpg  </bullet_item><para/>
        ///     <bullet_item>Joint Photographics Experts Group - JPEG - .jp2  </bullet_item><para/>
        ///     <bullet_item>Bitmap - BMP - .bmp  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>Some of the above raster formats have limitations and not all data can be converted to the format.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>输出栅格数据集的传送格式。提供的字符串格式应如下所示：
        ///   <bulletList>
        /// <bullet_item>格式名称 - 短名称 - 扩展名（如果有） </bullet_item></bulletList>
        ///   </para>
        /// <para>以下任何字符串都有效：
        ///   <bulletList>
        ///     <bullet_item>Esri GRID - GRID</bullet_item><para/>
        ///     <bullet_item>文件地理数据库 - GDB - .gdb</bullet_item><para/>
        ///     <bullet_item>ERDAS IMAGINE - IMG - .img</bullet_item><para/>
        ///     <bullet_item>标记 图像文件格式 - TIFF - .tif</bullet_item><para/>
        ///     <bullet_item>便携式网络图形 - PNG - .png</bullet_item><para/>
        ///     <bullet_item>图形交换格式 - GIF - .gif</bullet_item><para/>
        ///     <bullet_item>联合图像专家组 - JPEG - .jpg</bullet_item><para/>
        ///     <bullet_item>联合图像专家组 - JPEG - .jp2</bullet_item><para/>
        ///     <bullet_item>位图 - BMP - .bmp</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>上述某些栅格格式存在局限性，并非所有数据都可以转换为该格式。</para>
        /// </xdoc></para>
        /// </param>
        /// <param name="_Spatial_Reference">
        /// <para>Spatial Reference</para>
        /// <para><xdoc>
        ///   <para>The spatial reference of the output data delivered by the tool.</para>
        ///   <para>For standard Esri spatial references, the name you provide here should be the name of the desired coordinate system. This name corresponds to the name of the spatial reference's projection file. Alternatively, you can use the Well Known ID (WKID) of the coordinate system.</para>
        ///   <para>For example:
        ///   <bulletList>
        ///     <bullet_item>Sinusoidal (world)  </bullet_item><para/>
        ///     <bullet_item>WGS 1984 World Mercator  </bullet_item><para/>
        ///     <bullet_item>NAD 1983 HARN StatePlane Oregon North FIPS 3601 (Meters)  </bullet_item><para/>
        ///     <bullet_item>WGS 1984 UTM Zone 11N  </bullet_item><para/>
        ///     <bullet_item>102003  </bullet_item><para/>
        ///     <bullet_item>54001  </bullet_item><para/>
        ///     <bullet_item>If you want the output to have the same coordinate system as the input, then use the string "Same As Input".  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>For any custom projection, the name specified should be the name of the custom projection file (without extension). The location of the custom projection files should be specified in the Custom Spatial Reference Folder parameter.</para>
        ///   <bulletList>
        ///     <bullet_item>Same As Input—Use the coordinate from input</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>工具传送的输出数据的空间参考。</para>
        ///   <para>对于标准 Esri 空间参考，您在此处提供的名称应为所需坐标系的名称。此名称与空间参考的投影文件的名称相对应。或者，也可以使用坐标系的已知 ID （WKID）。</para>
        /// <para>例如：
        ///   <bulletList>
        ///     <bullet_item>正弦曲线（世界）</bullet_item><para/>
        ///     <bullet_item>WGS 1984 世界墨卡托</bullet_item><para/>
        ///     <bullet_item>NAD 1983 HARN StatePlane 俄勒冈北部 FIPS 3601（米）</bullet_item><para/>
        ///     <bullet_item>WGS 1984 UTM 11N 区</bullet_item><para/>
        ///     <bullet_item>102003</bullet_item><para/>
        ///     <bullet_item>54001</bullet_item><para/>
        ///     <bullet_item>如果希望输出与输入具有相同的坐标系，请使用字符串“与输入相同”。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>对于任何自定义投影，指定的名称应为自定义投影文件的名称（不带扩展名）。自定义投影文件的位置应在自定义空间参考文件夹参数中指定。</para>
        ///   <bulletList>
        ///     <bullet_item>与输入相同 （Same As Input） - 使用输入中的坐标</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        /// <param name="_Output_Zip_File">
        /// <para>Output Zip File</para>
        /// <para>The zip file that will contain the extracted data.</para>
        /// <para>将包含提取数据的 zip 文件。</para>
        /// </param>
        public ExtractData(List<object> _Layers_to_Clip, object _Area_of_Interest, object _Feature_Format, object _Raster_Format, object _Spatial_Reference, object _Output_Zip_File)
        {
            this._Layers_to_Clip = _Layers_to_Clip;
            this._Area_of_Interest = _Area_of_Interest;
            this._Feature_Format = _Feature_Format;
            this._Raster_Format = _Raster_Format;
            this._Spatial_Reference = _Spatial_Reference;
            this._Output_Zip_File = _Output_Zip_File;
        }
        public override string ToolboxName => "Server Tools";

        public override string ToolName => "Extract Data";

        public override string CallName => "server.ExtractData";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_Layers_to_Clip, _Area_of_Interest, _Feature_Format, _Raster_Format, _Spatial_Reference, _Custom_Spatial_Reference_Folder, _Output_Zip_File];

        /// <summary>
        /// <para>Layers to Clip</para>
        /// <para>The layers to be clipped. Layers must be feature or raster layers in the map's table of contents. Layer files do not work for this parameter.</para>
        /// <para>要裁剪的图层。图层必须是地图内容列表中的要素图层或栅格图层。图层文件不适用于此参数。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Layers to Clip")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public List<object> _Layers_to_Clip { get; set; }


        /// <summary>
        /// <para>Area of Interest</para>
        /// <para>One or more polygons by which the layers will be clipped.</para>
        /// <para>一个或多个面，用于剪裁图层。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Area of Interest")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _Area_of_Interest { get; set; }


        /// <summary>
        /// <para>Feature Format</para>
        /// <para><xdoc>
        ///   <para>The format in which the output features will be delivered. The string provided should be formatted as follows:
        ///   <bulletList>
        ///     <bullet_item>Name or format - Short Name - extension (if any)  </bullet_item></bulletList>
        ///   </para>
        ///   <para>The hyphen between the components is required, as well as the spaces around the hyphen.</para>
        ///   <para>For example:
        ///   <bulletList>
        ///     <bullet_item>File Geodatabase - GDB - .gdb  </bullet_item><para/>
        ///     <bullet_item>Shapefile - SHP - .shp  </bullet_item><para/>
        ///     <bullet_item>Autodesk AutoCAD - DXF_R2007 - .dxf  </bullet_item><para/>
        ///     <bullet_item>Autodesk AutoCAD - DWG_R2007 - .dwg  </bullet_item><para/>
        ///     <bullet_item>Bentley Microstation Design (V8) - DGN_V8 - .dgn  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>Internally, this tool uses the Export to CAD tool to convert data to the .dgn, .dwg, and .dxf CAD formats. The list of short names supported includes DGN_V8, DWG_R14, DWG_R2000, DWG_R2004, DWG_R2005, DWG_R2007, DWG_R2010, DXF_R14, DXF_R2000, DXF_R2004, DXF_R2005, DXF_R2007, and DXF_R2010.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>输出要素将用于交付的格式。提供的字符串格式应如下所示：
        ///   <bulletList>
        /// <bullet_item>名称或格式 - 短名称 - 扩展名（如果有） </bullet_item></bulletList>
        ///   </para>
        ///   <para>组件之间的连字符以及连字符周围的空格是必需的。</para>
        /// <para>例如：
        ///   <bulletList>
        ///     <bullet_item>文件地理数据库 - GDB - .gdb</bullet_item><para/>
        ///     <bullet_item>形状文件 - SHP - .shp</bullet_item><para/>
        ///     <bullet_item>Autodesk AutoCAD - DXF_R2007 - .dxf</bullet_item><para/>
        ///     <bullet_item>Autodesk AutoCAD - DWG_R2007 - .dwg</bullet_item><para/>
        ///     <bullet_item>Bentley Microstation Design （V8） - DGN_V8 - .dgn</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>在内部，此工具使用导出到 CAD 工具将数据转换为 .dgn、.dwg 和 .dxf CAD 格式。支持的短名称列表包括 DGN_V8、DWG_R14、DWG_R2000、DWG_R2004、DWG_R2005、DWG_R2007、DWG_R2010、DXF_R14、DXF_R2000、DXF_R2004、DXF_R2005、DXF_R2007 和 DXF_R2010。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Feature Format")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _Feature_Format { get; set; }


        /// <summary>
        /// <para>Raster Format</para>
        /// <para><xdoc>
        ///   <para>The format in which the output raster datasets will be delivered. The string provided should be formatted as follows:
        ///   <bulletList>
        ///     <bullet_item>Name of format - Short Name - extension (if any)  </bullet_item></bulletList>
        ///   </para>
        ///   <para>Any of the following strings will work:
        ///   <bulletList>
        ///     <bullet_item>Esri GRID - GRID  </bullet_item><para/>
        ///     <bullet_item>File Geodatabase - GDB - .gdb  </bullet_item><para/>
        ///     <bullet_item>ERDAS IMAGINE - IMG - .img  </bullet_item><para/>
        ///     <bullet_item>Tagged Image File Format - TIFF - .tif  </bullet_item><para/>
        ///     <bullet_item>Portable Network Graphics - PNG - .png  </bullet_item><para/>
        ///     <bullet_item>Graphic Interchange Format - GIF - .gif  </bullet_item><para/>
        ///     <bullet_item>Joint Photographics Experts Group - JPEG - .jpg  </bullet_item><para/>
        ///     <bullet_item>Joint Photographics Experts Group - JPEG - .jp2  </bullet_item><para/>
        ///     <bullet_item>Bitmap - BMP - .bmp  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>Some of the above raster formats have limitations and not all data can be converted to the format.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>输出栅格数据集的传送格式。提供的字符串格式应如下所示：
        ///   <bulletList>
        /// <bullet_item>格式名称 - 短名称 - 扩展名（如果有） </bullet_item></bulletList>
        ///   </para>
        /// <para>以下任何字符串都有效：
        ///   <bulletList>
        ///     <bullet_item>Esri GRID - GRID</bullet_item><para/>
        ///     <bullet_item>文件地理数据库 - GDB - .gdb</bullet_item><para/>
        ///     <bullet_item>ERDAS IMAGINE - IMG - .img</bullet_item><para/>
        ///     <bullet_item>标记 图像文件格式 - TIFF - .tif</bullet_item><para/>
        ///     <bullet_item>便携式网络图形 - PNG - .png</bullet_item><para/>
        ///     <bullet_item>图形交换格式 - GIF - .gif</bullet_item><para/>
        ///     <bullet_item>联合图像专家组 - JPEG - .jpg</bullet_item><para/>
        ///     <bullet_item>联合图像专家组 - JPEG - .jp2</bullet_item><para/>
        ///     <bullet_item>位图 - BMP - .bmp</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>上述某些栅格格式存在局限性，并非所有数据都可以转换为该格式。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Raster Format")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _Raster_Format { get; set; }


        /// <summary>
        /// <para>Spatial Reference</para>
        /// <para><xdoc>
        ///   <para>The spatial reference of the output data delivered by the tool.</para>
        ///   <para>For standard Esri spatial references, the name you provide here should be the name of the desired coordinate system. This name corresponds to the name of the spatial reference's projection file. Alternatively, you can use the Well Known ID (WKID) of the coordinate system.</para>
        ///   <para>For example:
        ///   <bulletList>
        ///     <bullet_item>Sinusoidal (world)  </bullet_item><para/>
        ///     <bullet_item>WGS 1984 World Mercator  </bullet_item><para/>
        ///     <bullet_item>NAD 1983 HARN StatePlane Oregon North FIPS 3601 (Meters)  </bullet_item><para/>
        ///     <bullet_item>WGS 1984 UTM Zone 11N  </bullet_item><para/>
        ///     <bullet_item>102003  </bullet_item><para/>
        ///     <bullet_item>54001  </bullet_item><para/>
        ///     <bullet_item>If you want the output to have the same coordinate system as the input, then use the string "Same As Input".  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>For any custom projection, the name specified should be the name of the custom projection file (without extension). The location of the custom projection files should be specified in the Custom Spatial Reference Folder parameter.</para>
        ///   <bulletList>
        ///     <bullet_item>Same As Input—Use the coordinate from input</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>工具传送的输出数据的空间参考。</para>
        ///   <para>对于标准 Esri 空间参考，您在此处提供的名称应为所需坐标系的名称。此名称与空间参考的投影文件的名称相对应。或者，也可以使用坐标系的已知 ID （WKID）。</para>
        /// <para>例如：
        ///   <bulletList>
        ///     <bullet_item>正弦曲线（世界）</bullet_item><para/>
        ///     <bullet_item>WGS 1984 世界墨卡托</bullet_item><para/>
        ///     <bullet_item>NAD 1983 HARN StatePlane 俄勒冈北部 FIPS 3601（米）</bullet_item><para/>
        ///     <bullet_item>WGS 1984 UTM 11N 区</bullet_item><para/>
        ///     <bullet_item>102003</bullet_item><para/>
        ///     <bullet_item>54001</bullet_item><para/>
        ///     <bullet_item>如果希望输出与输入具有相同的坐标系，请使用字符串“与输入相同”。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>对于任何自定义投影，指定的名称应为自定义投影文件的名称（不带扩展名）。自定义投影文件的位置应在自定义空间参考文件夹参数中指定。</para>
        ///   <bulletList>
        ///     <bullet_item>与输入相同 （Same As Input） - 使用输入中的坐标</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Spatial Reference")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _Spatial_Reference { get; set; }


        /// <summary>
        /// <para>Custom Spatial Reference Folder</para>
        /// <para>The location of any custom projection file or files referenced in the Spatial Reference parameter. This is only necessary if the custom projection file is not in the default installation Coordinate System folder.</para>
        /// <para>空间参考参数中引用的任何自定义投影文件或文件的位置。仅当自定义投影文件不在默认安装坐标系文件夹中时，才需要执行此操作。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Custom Spatial Reference Folder")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _Custom_Spatial_Reference_Folder { get; set; } = null;


        /// <summary>
        /// <para>Output Zip File</para>
        /// <para>The zip file that will contain the extracted data.</para>
        /// <para>将包含提取数据的 zip 文件。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Zip File")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _Output_Zip_File { get; set; }


        public ExtractData SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}